Graphical images are often generated in several steps. For example, an image may be created and then read to create another image through a sequence of render targets (RTs). The RT is an intermediate memory surface to which a 3D image is rendered. A sequence of steps may be performed to create RT “A” and then read RT A to create RT “B”. For example one possibility is to render an image by first writing lighting parameters into a G-buffer and, in a second step, rendering the lit image by reading the G-buffer and doing the light calculations. It is possible for a sequence of operations to be performed on different RTs before a final output image is generated.
However, these render target steps require a graphics processing unit (GPU) to access to external memory. Consider a graphics application that produces an intermediate image A, and then reads image A to produce image B. Given common image sizes (e.g., 1920×1080 pixels), and assuming the pixel is 4 bytes (RGBA8888 format), the intermediate image would have to be written to external memory if the cache cannot store 8 MB of data.
Thus a graphics processor may render all of a first RT (e.g., RT A), write it to an external memory, and then read it from external memory to create a second RT (RT B).